#pragma once
#include <iostream>
#include <vector>
#include <unistd.h>
#include <cstdlib>
#include <functional>
#include <ctime>

// 定义无参返回值的函数指针
// 定义一个名为 task_t 的新类型，这个类型实际上是一个函数指针类型
// 该函数指针指向一个返回类型为 void 并且不接受任何参数的函数。
typedef void (*task_t)();

// 打印日志
void PrintLog()
{
    std::cout << "子进程 [" << getpid() << "] 正在执行任务1：打印日志" << std::endl;
}

// 下载任务
void Download()
{
    std::cout << "子进程 [" << getpid() << "] 正在执行任务2：下载文件" << std::endl;
}

// 上传任务
void Upload()
{
    std::cout << "子进程 [" << getpid() << "] 正在执行任务3：上传文件" << std::endl;
}

class TaskManager
{
public:
    TaskManager(){
        srand(time(nullptr));
    }

    //注册
    void Register(task_t t){
        _tasks.push_back(t);
    }

    //获取任务码
    int Code(){
        return rand() % _tasks.size();
    }

    //执行任务
    void Execute(int code){
        if(code >= 0 && code < _tasks.size())
            _tasks[code]();
    }

private:
    std::vector<task_t> _tasks;
};